// 引入node:stream模块中的Transform类
const { Transform } = require('node:stream')
// 引入node:fs/promises模块中的fs.open方法
const fs = require('node:fs/promises')

// 定义Encryption类，继承自Transform类
class Encryption extends Transform {
  // 构造函数
  constructor() {
    super()
  }

  // 重写_transform方法
  _transform(chunk, encoding, callback) {
    // 打印读取到的数据
    console.log(chunk.toString('utf-8'))

    // 遍历读取到的数据，每个字符减1
    for (let i = 0; i < chunk.length; i++) {
      if (chunk[i] !== 255) {
        chunk[i] = chunk[i] - 1
      }
    }

    // 将处理后的数据推送到输出流中
    this.push(chunk)
    callback(null, chunk)
  }
}

// 异步函数
;(async () => {
  // 创建Encryption实例
  const encryption = new Encryption()

  // 打开要读取的文件
  const readStream = (await fs.open('./write.txt', 'r')).createReadStream()
  // 打开要写入的文件
  const writeStream = (
    await fs.open('./decrypted.txt', 'w')
  ).createWriteStream()

  // 将读取流通过加密实例处理后写入到写入流中
  readStream.pipe(encryption).pipe(writeStream)
})()
